package xyz.eden.boot.ability.code.generate;

import xyz.eden.boot.ability.code.generate.enums.TemplateEngineType;
import xyz.eden.boot.core.tool.AssertTool;

import java.io.IOException;
import java.util.Map;

public interface TemplateFactory {

    /**
     * 初始化模板引擎
     */
    void initTemplateEngine() throws IOException;

    /**
     * 支持处理
     *
     * @param engineType
     * @return
     */
    boolean isSupper(TemplateEngineType engineType);

    /**
     * @param template
     * @param dataMap
     * @return
     */
    String processTemplate(String template, Map<String, Object> dataMap);

    /**
     * 合并模板
     *
     * @param templateStr
     * @return
     */
    default String mergeTemplate(String templateStr, Map<String, Object> dataMap, TemplateEngineType engineType) throws Exception {

        /**
         * 1. 引擎确认
         */
        boolean isSupper = this.isSupper(engineType);
        AssertTool.isTrue(isSupper, new UnsupportedOperationException("暂不支持"));
        AssertTool.isNotBlank(templateStr, new IllegalArgumentException("模板信息为空"));

        /**
         * 2. 解析模板
         */
        return processTemplate(templateStr, dataMap);
    }
}
